zarovnanie nulami vo FB

Otázka od: Miso

27. 5. 2004 10:01

Zdar !

..mam ciselne pole a potreboval by som ho zmenit na string zarovnany z lava
nulami na urcity pocet znakov..existuje na to pod FB nejaka funkcia (prip.
UDF) alebo si mam na to urobit nejaku SP?

priklad : 1234 -> 00001234

dik,
Miso


Odpovedá: petr palicka

27. 5. 2004 16:45

Ahoj,

jednou jsem si na to psal UDFku:

(*
/* string cisel doplneny nulama zleva */
declare external function LZero
         cstring(254), Integer
         returns cstring(254) free_it
         entry_point 'LZero' module_name 'ag_udf.dll';
*)

function LZero(Source: PChar; var i: Integer): PChar; cdecl; export;
var
   s1, s2: string;
   j, k: Integer;
begin
   s1:=string(Source);
   s1:=Trim(s1);
   k:=Length(s1);
   for j:=1 to k do
     if s1[j]in ['0'..'9'] then
       s2:=s2+s1[j]; // pouze cislice!
   k:=i-Length(s2);
   for j:=1 to k do
     s2:='0'+s2;
   s2:=s2+#0;
   Result:=ib_util_malloc(Length(s2));
   StrPCopy(Result, s2);
end;

ale mozna ze existuje nejaka leftpadding funkce.
hledej lpad, leftpad...

kolegyne jednou pouzila v triggeru tohle:

   S = new.BLOK;
   if (S is null) then S = '';
   S = LTrim(S);
   S = RTrim(S);
   if (S is null) then S = '';
   l = StrLen(S);
   while (l < 4) do -- delka 4 zleva nuly
     begin
       S = '0' || S;
       l = StrLen(S);
     end
   new.Blok = S;

Peca